﻿/*
****************************************************************************************************************
*= = 版权信息：Copyright (C) 356 - 999. Ombres Industry Empiral. All rights reserved.
*= = 文件名称：Harbour.cxx
*= = 功能描述：风之谷客户端定义主文件
*= = 编写人员：Carlyon W. Tung
****************************************************************************************************************
*/

/*
*===============================================================================================================
*= = 声明文件
*===============================================================================================================
*/

#include <cstdio>
#include <iostream>
#include <string>

#include <boost/array.hpp>
#include <boost/asio.hpp>

#include <boost/config.hpp>
#include <boost/format.hpp>
#include <boost/thread.hpp>
#include <boost/version.hpp>

#include <log4cxx/helpers/exception.h>
#include <log4cxx/logger.h>
#include <log4cxx/propertyconfigurator.h>

#include "Harbour.h"

/*
*===============================================================================================================
*= = 预处理声明
*===============================================================================================================
*/

#ifdef HAVE_CONFIG_H
    #include <config.h>
#endif // End of HAVE_CONFIG_H

/*
*===============================================================================================================
*= = 宏定义
*===============================================================================================================
*/

#define COPYRIGHT "Copyright (C) 356 - 999. Ombres Industry Empiral. All rights reserved."
#define HBVERSION "Harbour 1.0.1 - 365"
#define HBAUTHORS "Carlyon W. Tung    loongs@syuusui.com"

/*
*===============================================================================================================
*= = 命名空间
*===============================================================================================================
*/

using namespace boost;
using namespace boost::asio;
using namespace boost::asio::ip;
using namespace log4cxx;
using namespace log4cxx::helpers;
using namespace std;

/*
*===============================================================================================================
*= = 全局变量
*===============================================================================================================
*/

#ifdef __INSIGHT_OS_WINDOWS__
static const string HarbourLogProperties = ".\\Asgard\\Harbour.properties";
#else
static const string HarbourLogProperties = "/etc/Windurb/Harbour.properties";
#endif

LoggerPtr g_rootLogger = nullptr;

/*
*===============================================================================================================
*= = 类定义
*===============================================================================================================
*/

/*
*===============================================================================================================
*= = 函数定义
*===============================================================================================================
*/

/*
*===============================================================================================================
*= = 函数名称：main
*= = 功能描述：基本入口函数
*= = 入口参数：int、char **
*= = 出口参数：int
*===============================================================================================================
*/

int main(int argc, char *argv[])
{
    std::cout << COPYRIGHT << std::endl;
    std::cout << HBVERSION << std::endl;
    std::cout << HBAUTHORS << std::endl;

    try
    {
        PropertyConfigurator::configure(HarbourLogProperties);
    }
    catch (...)
    {
        std::cout << "Harbour - Harbour: log4cxx initial ERROR!" << std::endl;

        return -1;
    }

    g_rootLogger = Logger::getRootLogger();

    LOG4CXX_INFO(g_rootLogger, "Harbour - Harbour: Initial SUCCESS.");
    LOG4CXX_DEBUG(g_rootLogger, boost::format("Boost version is %1%.") % BOOST_LIB_VERSION);

    try
    {
        boost::asio::io_context harbour_io_context;

        asio::ip::tcp::resolver resolver(harbour_io_context);
        asio::ip::tcp::resolver::results_type endpoints = resolver.resolve("127.0.0.1", "32404");

        asio::ip::tcp::socket socket(harbour_io_context);
        boost::asio::connect(socket, endpoints);

        for (;;)
        {
            boost::array<char, 1024> buf;
            boost::system::error_code error;

            size_t len = socket.read_some(boost::asio::buffer(buf), error);

            if (error == boost::asio::error::eof)
            {
                break;
            }
            else if (error)
            {
                throw boost::system::system_error(error);
            }

            std::cout.write(buf.data(), len);
        }
    }
    catch (std::exception& e)
    {
        LOG4CXX_ERROR(g_rootLogger, boost::format("Harbour - Harbour: Exception: %1%.") % e.what());
    }

    return 0;
}


/*
****************************************************************************************************************
*= = 文件结束
****************************************************************************************************************
*/


